package cn.ware.house.interfaces.service;

import cn.ware.house.interfaces.entity.Warehouse;
import java.util.List;

/**
 * 仓库服务接口，定义了对仓库业务逻辑操作的抽象方法，
 * 这些方法会调用数据访问层（WarehouseMapper）的方法来实现具体功能，
 * 对外提供统一的服务接口，便于控制层调用以及业务逻辑的封装。
 */
public interface WarehouseService {
    /**
     * 根据仓库编号查询仓库信息。
     *
     * @param warehouseId 仓库编号
     * @return 对应的仓库实体对象，如果不存在则返回null
     */
    Warehouse findWarehouseById(Integer warehouseId);

    /**
     * 查询所有仓库信息。
     *
     * @return 包含所有仓库信息的列表
     */
    List<Warehouse> findAllWarehouses();

    /**
     * 插入仓库信息到数据库。
     *
     * @param warehouse 要插入的仓库实体对象
     * @return 插入操作是否成功（一般根据受影响行数判断）
     */
    boolean insertWarehouse(Warehouse warehouse);

    /**
     * 根据仓库编号更新仓库信息。
     *
     * @param warehouse 包含更新后信息的仓库实体对象
     * @return 更新操作是否成功（根据受影响行数判断）
     */
    boolean updateWarehouseById(Warehouse warehouse);

    /**
     * 根据仓库编号删除仓库信息。
     *
     * @param warehouseId 要删除的仓库编号
     * @return 删除操作是否成功（根据受影响行数判断）
     */
    boolean deleteWarehouseById(Integer warehouseId);

    /**
     * 根据仓库名称模糊查询仓库信息列表。
     * 在实际业务中，可用于通过部分仓库名称快速查找相关仓库记录。
     *
     * @param warehouseNameLike 模糊匹配的仓库名称部分内容
     * @return 匹配的仓库信息列表，可能为空列表表示没有找到符合条件的仓库
     */
    List<Warehouse> findWarehousesByLikeName(String warehouseNameLike);

    /**
     * 获取指定仓库的库存商品种类数量（假设可以通过关联库存表等方式统计）。
     * 有助于了解仓库中商品的丰富度情况，用于仓库管理等业务场景。
     *
     * @param warehouseId 仓库编号
     * @return 该仓库的库存商品种类数量，若没有库存商品则返回0
     */
    int getProductVarietyCountInWarehouse(Integer warehouseId);

    /**
     * 获取指定仓库的库存总量（假设能通过关联库存表等汇总计算得出）。
     * 方便掌握仓库整体的货物存储量情况，辅助库存监控等业务操作。
     *
     * @param warehouseId 仓库编号
     * @return 该仓库的库存总量，若没有库存记录等情况返回0
     */
    int getTotalStockInWarehouse(Integer warehouseId);
}